// 题目要求：
// 给定一个 n * n 的矩阵，和两个操作
// 1. 顺时针旋转矩阵 180 度
// 2. 关于行镜像

// 输入一个 n 表示矩阵的规模，接下来 n 行，每行给 n 个数，表示矩阵
// 接下来给一个 q，表示询问次数
// 接下来 q 行，每次是一个操作（只会是 1 或者 2）
//输出最后的矩阵

// 解题思路：
// 操作 1：180 度旋转，实际上是一个行镜像加一个列镜像
// 操作 2：是一个行镜像

// 两个行镜像会相互抵消，两个列镜像也会相互抵消
// 因此要统计一下有几个行镜像，几个列镜像，再分别 % 2

// 因为题目数据量很大，而且需要读入和输出，因此需要使用快读模板

import java.io.*;
import java.util.StringTokenizer;

public class RotationMatrix {
    public static Read in = new Read();
    public static PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));
    public static void main(String[] args) throws IOException{
        int n = in.nextInt();
        int[][] arr = new int[n][n];

        for(int i = 0; i < n; i++){
            for(int j = 0; j < n; j++){
                arr[i][j] = in.nextInt();
            }
        }

        int q = in.nextInt();
        int row = 0;
        int col = 0;
        for(int i = 0; i < q; i++){
            int t = in.nextInt();
            if(t == 1){
                row++;
                col++;
            }else {
                row++;
            }
        }

        row %= 2;
        col %= 2;

        if(row != 0) {
            rowSwap(arr);
        }
        if(col != 0){
            colSwap(arr);
        }

        for(int i = 0; i < n; i++){
            for(int j = 0; j < n; j++){
                out.print(arr[i][j] + " ");
            }
            out.println();
        }
        out.close();
    }

    private static void rowSwap(int[][] arr){
        int n = arr.length;
        for(int i = 0; i < n / 2; i++){
            for(int j = 0; j < n; j++){
                swap(arr, i, j, n - 1 - i, j);
            }
        }
    }

    private static void colSwap(int[][] arr){
        int n = arr.length;
        for(int j = 0; j < n / 2; j++){
            for(int i = 0; i < n; i++){
                swap(arr, i, j, i, n - 1 - j);
            }
        }
    }

    private static void swap(int[][] arr, int i, int j, int x, int y){
        int t = arr[i][j];
        arr[i][j] = arr[x][y];
        arr[x][y] = t;
    }
}

class Read{
    StringTokenizer st = new StringTokenizer("");
    BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));

    String next() throws IOException {
        while(!st.hasMoreTokens()){
            st = new StringTokenizer(bf.readLine());
        }
        return st.nextToken();
    }

    int nextInt() throws IOException{
        return Integer.parseInt(next());
    }

    String nextLine()throws IOException{
        return bf.readLine();
    }

    long nextLong() throws IOException{
        return Long.parseLong(next());
    }

    double nextDouble() throws IOException{
        return Double.parseDouble(next());
    }
}
